package com.zc.study.designPattern.创建型设计模式.singletonPattern;

import com.zc.initConstructor.GlobalData;

import java.util.Random;

/**
 * 场景:创建一个数据库连接池,将指定个数的(如2个或3个)数据库连接
 * 对象存储在连接池,客户端可以从池子中随机选取一个连接帝乡连接数据库
 * 通过对单例类惊醒改造,设计一个能够自行提供指定个数实例独享的连接类
 */
public class Example {
    //1构造器私有化

    private Example() {
        //默认建一个对象放在连接池
    }

    //2 提供实例方法的生产工厂
    private static void factory() {

            synchronized (Example.class) {
                Example example = null;
                if (GlobalData.example != GlobalData.exampleList.size()) {
                    for (int i = 0; i < GlobalData.example; i++) {
                        example = new Example();
                        GlobalData.exampleList.add(example);
                    }
                }
            }
    }

    //3提供实例的获取方法
    private static  Example instance() {
        if (GlobalData.example != GlobalData.exampleList.size()) {
            factory();
        }
        Random rand = new Random();
        int index = 3*rand.nextInt(10)/10;
        Example example = GlobalData.exampleList.get(index);
        return example;
    }

    //4提供公有的方法供外部访问
    public static Example getInstance(){
        Example example = instance();
        return  example;
    }


}
